package email;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendEmail{

	private Properties propriedade;
	
	private Session sessao;

	private BodyPart bp;
	private DataSource source;
	private Multipart multipart;

	public SendEmail(){
		propriedade = new Properties();
		
		multipart = new MimeMultipart();
		bp = new MimeBodyPart();
		source = new FileDataSource("./src/Repositorio/feliz_aniversario.jpg");
	}

	public String enviarEmail(String servidor, Email email){
		if("gmail".equals(servidor)){
			propriedadesGmail();
		} else {
			if("hotmail".equals(servidor)){
				propriedadesHotmail();
			} else {
				return "Servidor '" + servidor + "' nao cadastrado.";
			}
		}
		System.out.println(email.getEmailRemetente());
		autenticarGmail(email.getEmailRemetente(), email.getSenhaRemetente());
		adicionarImagem();
		enviar(email.getEmailRemetente(), email.getEmailDestinatario(), email.getAssunto(), email.getTexto());

		return "Sucesso ao enviar email pelo " + servidor;
	}
	
	protected void propriedadesGmail(){
		propriedade.put("mail.smtp.host", "smtp.gmail.com");
		propriedade.put("mail.smtp.socketFactory.port", "465");
		propriedade.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		propriedade.put("mail.smtp.auth", "true");
		propriedade.put("mail.smtp.port", "465");
	}

	protected void propriedadesHotmail(){
		propriedade.put("mail.transport.protocol", "smtp");    
		propriedade.put("mail.smtp.host", "smtp.live.com");    
		propriedade.put("mail.smtp.socketFactory.port", "587");    
		propriedade.put("mail.smtp.socketFactory.fallback", "false");    
		propriedade.put("mail.smtp.starttls.enable", "true");    
		propriedade.put("mail.smtp.auth", "true");    
		propriedade.put("mail.smtp.port", "587"); 
	}

	protected void autenticarGmail(final String emailRemetente, final String senhaRemetente){
		sessao = Session.getDefaultInstance(propriedade, new javax.mail.Authenticator() {
			protected PasswordAuthentication getPasswordAuthentication()
			{
				return new PasswordAuthentication(emailRemetente, senhaRemetente);
			}
		});
		sessao.setDebug(true);
	}

	protected void adicionarImagem(){
		try{ 
			bp.setDataHandler(new DataHandler(source));
			bp.setFileName("feliz_aniversario.jpg"); 
			bp.setHeader("Content-ID", "Feliz Aniversario");
			
			multipart.addBodyPart(bp);
		}catch (Exception e){
			e.printStackTrace();
		}
	}

	protected void enviar(String emailRemetente, String emailDestinatario, String assunto, String texto){
		try {

			Message message = new MimeMessage(sessao);
			
			
			message.setFrom(new InternetAddress(emailRemetente));

			Address[] toUser = InternetAddress.parse(emailDestinatario);

			message.setRecipients(Message.RecipientType.TO, toUser);
			message.setSubject(assunto);
			message.setText(texto);
			//message.setContent(multipart);
			
			Transport.send(message);

		} catch (MessagingException e) {
			throw new RuntimeException(e);
		}
	}
}
